﻿<cfscript>
/** 
* Senate Frameworks classroomTypeUsageProperty
* 
* @hint "The classroom type usage property object handler." 
*/ 

component 
	displayname="public.service.handler.classroomTypeUsageProperty" 
	output=false 
	accessors=true 
	{
		
	/* PROPERTIES */
	property type="boolean" name="Running" default="false" hint="教室是否可用";
	property type="boolean" name="ForCourse" default="false" hint="是否用于上课";
	property type="boolean" name="ForExam" default="false" hint="是否用于考试";
	property type="boolean" name="ForBorrow" default="false" hint="是否可临时借用";
	
	/**
	* @hint "初始化对象"
	* 
	* @Running "教室是否可用"
	* @ForCourse "是否用于上课"
	* @ForExam "是否用于考试"
	* @ForBorrow "是否可临时借用"
	*/
	public public.service.handler.classroomTypeUsageProperty function init( boolean Running=false, boolean ForCourse=false, boolean ForExam=false, boolean ForBorrow=false ) output=false {

		setRunning( arguments.Running );
		setForCourse( arguments.ForCourse );
		setForExam( arguments.ForExam );
		setForBorrow( arguments.ForBorrow );
		
		return this;
	}
	
	/**
	* @hint "将上述属性转换为属性字符串"
	*/
	public string function stringUsage() output=false {
		var usage = "";
		
		/* 总体参数变化控制 如果教室可用状态设置为否 则所有的子用途都应当设置为 0 */
		if (not getRunning()) {
			setForCourse(false);
			setForExam(false);
			setForBorrow(false);
		}
		
		/* 执行序列化 */
		if (getRunning()) { usage = usage & "1"; } else { usage = usage & "0"; }

		if (getForCourse()) { usage = usage & "1"; } else { usage = usage & "0"; }
		if (getForExam()) { usage = usage & "1"; } else { usage = usage & "0"; }
		if (getForBorrow()) { usage = usage & "1"; } else { usage = usage & "0"; }
		
		return usage;
	}
	
	/**
	* @hint "将属性字符串转换为对象属性"
	* 
	* @fString "属性字符串"
	*/
	public void function parseUsage( required string fString ) output=false {
		
		var i = 0;
		
		for (i=1; i <= len(arguments.fString); i++) {
			
			switch (i) {
				
				case 1:
					/* 第1位 教室是否可用 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setRunning(true); } else { setRunning(false); }
					break;

				case 2:
					/* 第2位 是否用于上课 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setForCourse(true); } else { setForCourse(false); }
					break;
				
				case 3:
					/* 第3位 是否用于考试 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setForExam(true); } else { setForExam(false); }
					break;
				
				case 4:
					/* 第4位 是否可临时借用 */
					if (yesNoFormat(mid(arguments.fString, i, 1))) { setForBorrow(true); } else { setForBorrow(false); }
					break;
				
			}
			
		}
		
	}
	
}

</cfscript>